package com.chandon.T00_basic;

import com.chandon.common.Cv;
import com.chandon.T00_basic.filter.AgeFilter;
import com.chandon.T00_basic.filter.CvFilter;
import com.chandon.T00_basic.filter.ScopeFilter;

import java.util.ArrayList;
import java.util.List;

/**
 * 策略模式，面向接口编程的思想
 * 如果需要别的功能，只需要在接口中增加，扩展性变好。
 * 缺点：增加功能要不断增加子类，可以使用匿名内部类，避免增多的接口子类。
 *
 *
 *
 * @author Dong
 * @version 1.0
 * @date 2021-04-12 18:10
 */

public class T01_Why_LambdaA {

    public static void main(String[] args) {

        List<Cv> cvList = new ArrayList<Cv>();

        initCvList(cvList);
        filtCv(cvList,new AgeFilter());
        filtCv(cvList,new ScopeFilter());
    }

    public static void filtCv(List<Cv> list, CvFilter filter){

        List<Cv> cvList = filter.filt(list);
        printCv(cvList);
    }


    public static void initCvList(List<Cv> cvs) {
        Cv cv1 = Cv.builder().name("yui").age(17).scope(10).build();
        Cv cv2 = Cv.builder().name("asami").age(18).scope(9).build();
        Cv cv3 = Cv.builder().name("asamiyui").age(32).scope(8).build();

        cvs.add(cv1);
        cvs.add(cv2);
        cvs.add(cv3);

    }

    public static void printCv(List<Cv> cvList){
        for (Cv cv : cvList) {
            System.out.println(cv);
        }
        System.out.println("---------------");
    }
}
